﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DayDayup
{
    class Program
    {
        static void Main(string[] args)
        {
            //            第一题：
            //          一个考试管理系统，需要录入考生成绩，只能录入数字，否则会报类型转换异常。
            //          请编写相关代码，
            //          1、捕获FormatException异常，并打印输出“异常已处理；
            //          2、捕获OverflowException异常，数值超出float范围的异常，并打印输出“异常已处理；
            //          3、捕获一般异常Exception异常。
            //          4、最终处理finally
            //          录入成绩结束后，请输出，总学生数，总分数，平均分。

            int student = 0;
            float[] aa = new float[3];
            float sum = 0;
            int i = 0;
            while (true)
            {

                try
                {

                    Console.WriteLine("请输入你要录入的第{0}学生成绩：", i + 1);
                    aa[i] = float.Parse(Console.ReadLine());
                    if (!(aa[i] > 0 && aa[i] < 150))
                    {

                        throw new OverflowException();
                    }
                    student++;

                }
                catch (FormatException e)
                {
                    Console.WriteLine("输入的成绩存在形式错误，异常已处理"+ e.Message);
                    continue;
                }
                catch (OverflowException e)
                {
                    Console.WriteLine("输入的成绩超过指定范围，异常已处理"+ e.Message);
                    continue;
                }
                catch (Exception)
                {
                    Console.WriteLine("异常已处理");

                    continue;
                }
                finally { }
                i++;
                if (i > aa.Length - 1)
                {
                    break;
                }

            }
            for (i = 0; i < aa.Length; i++)
            {
                Console.WriteLine("第{0}学生成绩：", i + 1);
                Console.WriteLine(aa[i]);
                sum += aa[i];
            }
            Console.WriteLine("学生数：" + student + "学生总成绩：" + sum + "学生平均成绩：" + (sum / student));
            //    #endregion
            #region 
            //        第二题：
            //编写一个程序，用以接收用户输入的两个浮点型的数值，一个值表示用户想要存放在银行账户中的余额，另一个值表示用户想要从银行账户中提取的金额。
            //实现存取款功能，
            //用户功能选择：1、存款，2、取款
            //取款时：
            //当用户想要提取的金额大于余额时，请手动抛出一个ArgumentOutOfRangeException 参数超出范围的异常，异常信息可以写“取款金额大于余额，请重新输入”
            //，如此以确保取款金额始终不大于当前余额。
            //操作结束，打印输出余额是多少。
            //最后再添加catch一般异常 Exception，使得数据类型转换的异常也能被捕获到。
            List<ATM> list = new List<ATM>();
            ATM user = new ATM();
            Console.WriteLine("请输入余额：");
            user.Money = double.Parse(Console.ReadLine());
            list.Add(user);
            while (true)
            {
                Console.WriteLine("请选择功能：1、存款，2、取款");
                int a = int.Parse(Console.ReadLine());
                try
                {
                    switch (a)
                    {
                        case 1:
                            for (int c = 0; c < list.Count; c++)
                            {
                                Console.WriteLine("输入你要存款的金额");
                                list[c].Inmoney = double.Parse(Console.ReadLine());
                                user.Money += list[c].Inmoney;
                                Console.WriteLine($"您已存入{list[c].Inmoney},余额：{user.Money}");
                            }
                            break;
                        case 2:
                            for (int d = 0; d < list.Count; d++)
                            {
                                Console.WriteLine("输入你要取款的金额");
                                list[d].Outmoney = double.Parse(Console.ReadLine());
                                if (user.Money < list[d].Outmoney)
                                {
                                    throw new ArgumentOutOfRangeException("对不起您没有那么多的钱，请确定金额，谢谢！");
                                }
                                else
                                {
                                    user.Money -= list[d].Outmoney;
                                    Console.WriteLine($"您已取出{list[d].Outmoney},余额：{user.Money}");
                                }
                            }
                            break;

                    }
                }
                catch (ArgumentOutOfRangeException e)
                {
                    Console.WriteLine(e.Message);
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.Message);
                }
                finally
                {
                    Console.WriteLine();
                }
            }
            #endregion

        }
        class ATM
        {
            private double money;
            private double inmoney;
            private double outmoney;

            public double Money { get => money; set => money = value; }
            public double Inmoney { get => inmoney; set => inmoney = value; }
            public double Outmoney { get => outmoney; set => outmoney = value; }

            public override string ToString()
            {
                return base.ToString();
            }
        }
    }
}
